package com.zjl.redis.第11章_redis多线程;

/**
 ***********************IO线程是多线程的，主的写线程还是单线程**********************************************
 * 1.接收建立连接请求，获取Socket
 * 2.将Socket放入全局等待队列
 * 3.以轮询方式将Socket连接分配给IO线程
 * 4.      ●轮询到的: IO线程 开始执行
 *                  1） 将Socket和线程绑定
 *                  2） 读取Socket中的请求并解析
 *                  3） 请求解析完成 发给主线程
 *         ●没被轮询到的：主线程阻塞，等待IO线程完成请求读取和解析
 *  5.执行请求的命令操作
 *  6.请求的命令操作执行完成
 *  7.将结果数据写入缓冲区
 *  8.主线程阻塞，等待IO线程完成数据回写Socket
 *  9.      IO线程 开始执行
 *               1） 将结果数据回写Socekt
 *               2） Socket回写完成
 *  10.清空等待队列，等待后续请求
 *          即 回3
 *
 *
 * IO线程 -多线程  会和各个连接redis的客户端进行通信
 *
 * redis6 之前
 *      I/O的读和写本身是堵塞的，比如当socket中有数据时，
 *      Redis 会通过调用先将数据从内核态空间拷贝到用户态空间，再交给Redis 调用，
 *      而这个拷贝的过程就是阻塞的，当数据量越大时拷贝所需要的时间就越多，而这些操作都是基于单线程完成的。
 * redis6 开始
 *      从Redis6开始，就新增了多线程的功能来提高I/O的读写性能，他的主要实现思路是将主线程的IO读写任务拆分给一组 独立的线程去执行，
 *      这样就可以使多个socket的读写可以并行化了，
 *      采用多路I/O复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗)，
 *      将最耗时的Socket的读取、请求解析、写入单独外包出去，剩下的命令执行仍然由主线程串行执行并和内存的数据交互。
 *
 *
 *
 */
public class C_多线程IO的流程 {

}
